home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / utils / satpic / satpic.asm < prev    next >
Assembly Source File  |  1980-01-03  |  14KB  |  703 lines

  1. ;
  2. ; HUOM!
  3. ;
  4. ; SatPic-ohjelma on alun perin tehty assembler-kielen esiprosessoria käyttäen.
  5. ; Alkuperäinen lähdekoodi on tiedostossa SatPic.alp, tämän tiedoston sisältämä
  6. ; listaus on esiprosessorin tuottamaa ja siksi symbolien arvot ovat koneelli-
  7. ; sesti tuotettuja.  Tämä tiedosto on käännettävissä A68k-kääntäjällä,
  8. ; SatPic.alp vaatii kääntyäkseen esiprosessoinnin.
  9. ;
  10. ; Kommentteja ei valitettavasti ole liiemmälti viljelty...
  11. ;
  12. ;
  13. PREPROC    set    1
  14. ;+asm
  15. ;add lkopt SC
  16. ;do
  17. ;*
  18. ;
  19. ; ### WeatherSatelliteReceiver by JM v 1.00 ###
  20. ;
  21. ; - Created 910523 by JM -
  22. ;
  23. ;
  24. ; Usage:
  25. ;    sat [buf_siz]
  26. ;
  27. ;    where buf_siz is the raw buffer size (default 16384).
  28. ;
  29. ;
  30. ; Bugs: Hmm.  If you ask me, the hardware itself is a big bug.
  31. ;
  32. ;
  33. ; Edited:
  34. ;
  35. ; - 910523 by JM -> v0.01    - code from uBDitigizer.      | One year since.. |
  36. ; - 910524 by JM -> v0.02    - Opens a screen and a window.
  37. ; - 910525..910529        - Lots of modifications, it works now.
  38. ; - 910530 by JM -> v1.00    - All commands finished, code crunched and tested.
  39. ;                - Uses a command table instead of several cmp.b's.
  40. ;
  41.  
  42.  
  43.     include    "bb.i"
  44.     include    "exec/types.i"
  45.     include    "exec/execbase.i"
  46.     include    "exec/tasks.i"
  47.     include    "exec/nodes.i"
  48.     include    "exec/memory.i"
  49.     include    "exec/io.i"
  50.     include    "exec/strings.i"
  51.     include    "exec/interrupts.i"
  52.     include    "exec/initializers.i"
  53.     include    "hardware/intbits.i"
  54.     include    "hardware/cia.i"
  55.     include    "exec/interrupts.i"
  56.     include    "intuition/intuition.i"
  57.     include    "com.i"
  58.     include    "relative.i"
  59.     include    "util.i"
  60.     include    "macros.i"
  61. ;    include    "constants.i"
  62.     include    "hards.i"
  63.  
  64.     XREF    _LVOSetICR
  65.     XREF    _LVOAbleICR
  66.     XREF    _LVOAddICRVector
  67.     XREF    _LVORemICRVector
  68.  
  69. _LVOAllocMiscResource    equ    -6
  70. _LVOFreeMiscResource    equ    -12
  71. MR_PARALLELPORT    equ    2
  72.  
  73. userport    equ    $bfe101
  74. datadir        equ    $bfe301
  75. timerl        equ    $bfd400
  76. timerh        equ    $bfd500
  77. tcontrol    equ    $bfde00
  78. tint        equ    $bfdd00
  79.  
  80. HUGEMEM        equ    1000000000        -- never to be available --
  81.  
  82. ROWS        equ    512
  83. BYTESPERROW    equ    40
  84.  
  85. .GfxBase    equ    -4
  86.         xdef    .GfxBase
  87. .IntuitionBase    equ    -8
  88.         xdef    .IntuitionBase
  89. .MiscResBase    equ    -12
  90.         xdef    .MiscResBase
  91. .CIABase    equ    -16
  92.         xdef    .CIABase
  93. DATA        equ    -20
  94. data        equ    -24
  95. screen        equ    -28
  96. window        equ    -32
  97. begbuf        equ    -36
  98. bufpoi        equ    -40
  99. modulo        equ    -44
  100. parport        equ    -45
  101. int        equ    -46
  102.  
  103.         link    a4,#-46
  104.         movem.l    d0/a4,-(sp)
  105.         moveq    #10,d0
  106. ._1        clr.l    -(a4)
  107.         dbf    d0,._1
  108.         clr.w    -(a4)
  109.         movem.l    (sp)+,d0/a4
  110.         moveq    #0,d2    ; result
  111. _1.numlp    moveq    #0,d0
  112.         move.b    (a0)+,d0
  113.         sub.b    #'0',d0
  114.         blo.s    _1.numgot
  115.         cmp.b    #'9',d0
  116.         bhi.s    _1.numgot
  117.         add.l    d2,d2        ; d2 = old * 2
  118.         move.l    d2,d1        ; d1 = old * 2
  119.         add.l    d2,d2        ; d2 = old * 4
  120.         add.l    d2,d2        ; d2 = old * 8
  121.         add.l    d1,d2        ; d2 = old * 10
  122.         add.l    d0,d2        ; d2 = old * 10 + new
  123.         bra.s    _1.numlp
  124. _1.numgot
  125.         xref    _LVOOldOpenLibrary
  126.         lea    ._2(pc),a1
  127.         move.l    $4,a6
  128.         jsr    _LVOOldOpenLibrary(a6)
  129.         move.l    d0,.GfxBase(a4)
  130.         beq    _1.cleanup
  131.         lea    ._3(pc),a1
  132.         move.l    $4,a6
  133.         jsr    _LVOOldOpenLibrary(a6)
  134.         move.l    d0,.IntuitionBase(a4)
  135.         beq    _1.cleanup
  136.  
  137.         move.l    #16384,d0
  138.         cmp.l    d0,d2
  139.         blo.s    _1.numerr    ; not a valid buffer size
  140.         move.l    d2,d0
  141. _1.numerr    move.l    d0,DATA(a4)    ; save buffer size
  142.  
  143.         moveq    #103,d7    ; out of memory
  144.         move.l    #MEMF_PUBLIC,d1
  145.         xref    _LVOAllocMem
  146.         move.l    $4,a6
  147.         jsr    _LVOAllocMem(a6)
  148.         move.l    d0,data(a4)
  149.         beq    _1.cleanup
  150.         move.l    d0,a0
  151.         move.l    a0,begbuf(a4)
  152.         move.l    DATA(a4),a2
  153.         subq.l    #4,a2
  154.         add.l    a0,a2    ; end address
  155.         moveq    #0,d5    ; start from color #0
  156. patloop0    moveq    #15,d4
  157. patloop1    moveq    #19,d3
  158.         move.l    d5,d0    ; color
  159. patloop2    moveq    #15,d2
  160. patloop3    move.b    d0,(a0)+    ; put 16 bytes of the same color
  161.         cmp.l    a2,a0
  162.         bhs    pattern_ok
  163.         dbf    d2,patloop3
  164.         add.w    #16,d0    ; change color
  165.         dbf    d3,patloop2
  166.         dbf    d4,patloop1
  167.         add.w    #16,d5
  168.         bra    patloop0
  169.  
  170. pattern_ok    move.w    #202,d7    ; cant get parallel port
  171.         bsr    allocparallel
  172.         bne    _1.cleanup
  173.  
  174.         moveq    #0,d0
  175.         lea    nscreen(pc),a1
  176.         lea    NS,a2
  177.         xref    _LVOInitStruct
  178.         move.l    $4,a6
  179.         jsr    _LVOInitStruct(a6)
  180.  
  181.         moveq    #104,d7    ; cannot OpenScreen()
  182.         move.l    a2,a0
  183.         xref    _LVOOpenScreen
  184.         move.l    .IntuitionBase(a4),a6
  185.         jsr    _LVOOpenScreen(a6)
  186.         move.l    d0,screen(a4)
  187.         beq    _1.cleanup
  188.         move.l    d0,a2
  189.         lea    sc_ViewPort(a2),a0
  190.         lea    colors(pc),a1
  191.         moveq    #16,d0
  192.         xref    _LVOLoadRGB4
  193.         move.l    .GfxBase(a4),a6
  194.         jsr    _LVOLoadRGB4(a6)
  195.  
  196.         moveq    #106,d7    ; cannot OpenWindow()
  197.         moveq    #0,d0
  198.         lea    nwindow(pc),a1
  199.         lea    NW,a2
  200.         move.l    $4,a6
  201.         jsr    _LVOInitStruct(a6)
  202.         move.l    a2,a0
  203.         move.l    screen(a4),nw_Screen(a0)
  204.         xref    _LVOOpenWindow
  205.         move.l    .IntuitionBase(a4),a6
  206.         jsr    _LVOOpenWindow(a6)
  207.         move.l    d0,window(a4)
  208.         beq    _1.cleanup
  209.  
  210.         move.l    #(BYTESPERROW*8*256),modulo(a4)
  211.  
  212.         moveq    #127,d7
  213.         bsr    allocint
  214.         bne    _1.cleanup
  215.  
  216. _1.waitloop    bsr    geti
  217.         bmi    _1.away
  218.         beq    _1.waitloop
  219.         tst.b    d0
  220.         bmi    _1.waitloop    ; key UP
  221.  
  222. _1.handle    lea    _1.cmdtable(pc),a2    ; RAW.B, QUAL.B, ADR.W
  223. _1.handlecmp    move.b    (a2)+,d2    ; get rawkey code
  224.         beq.s    _1.waitloop    ; not found
  225.         cmp.b    d2,d0    ; entry = key pressed?
  226.         beq.s    _1.handlefnd    ; yep -> check qualifier
  227.         addq.l    #3,a2    ; nope -> next entry
  228.         bra.s    _1.handlecmp
  229. _1.handlefnd    move.b    (a2)+,d2    ; get qualifier from table
  230.         beq.s    _1.handledoit    ; zero -> don't care, do it
  231.         and.b    d1,d2    ; non-zero: perform and
  232.         bne.s    _1.handledoit    ; yep, go do it
  233.         addq.l    #2,a2    ; nope, try next one
  234.         bra.s    _1.handlecmp
  235. _1.handledoit    moveq    #0,d2    ; clear d2
  236.         add.w    (a2),a2    ; get jump address
  237.     jmp    (a2)
  238.  
  239. _1.cmdtable    dc.b    $45,0            ; ESC
  240.         dptr    _1.away
  241.         dc.b    $22,0            ; D
  242.         dptr    _1.Cdigi
  243.         dc.b    $4f,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift left
  244.         dptr    _1.CSleft
  245.         dc.b    $4e,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift right
  246.         dptr    _1.CSright
  247.         dc.b    $2d,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift num4
  248.         dptr    _1.CSnum4
  249.         dc.b    $2f,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift num 6
  250.         dptr    _1.CSnum6
  251.         dc.b    $2e,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift num 5
  252.         dptr    _1.CSnum5
  253.         dc.b    $2d,IEQUALIFIER_LALT!IEQUALIFIER_RALT      ; alt num 4
  254.         dptr    _1.CAnum4
  255.         dc.b    $2f,IEQUALIFIER_LALT!IEQUALIFIER_RALT      ; alt num 6
  256.         dptr    _1.CAnum6
  257.         dc.b    $4c,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift up
  258.         dptr    _1.CSup
  259.         dc.b    $4d,IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT ; shift down
  260.         dptr    _1.CSdown
  261.         dc.b    $4c,IEQUALIFIER_LALT!IEQUALIFIER_RALT      ; alt up
  262.         dptr    _1.Creset
  263.         dc.b    $4d,IEQUALIFIER_LALT!IEQUALIFIER_RALT      ; alt down
  264.         dptr    _1.Creset
  265.  
  266.         dc.b    $4c,0            ; cursor up
  267.         dptr    _1.Cup
  268.         dc.b    $4d,0            ; cursor down
  269.         dptr    _1.Cdown
  270.         dc.b    $4f,0            ; cursor left
  271.         dptr    _1.Cleft
  272.         dc.b    $4e,0            ; cursor right
  273.         dptr    _1.Cright
  274.         dc.b    $2d,0            ; numeric pad 4
  275.         dptr    _1.Cnum4
  276.         dc.b    $2f,0            ; numeric pad 6
  277.         dptr    _1.Cnum6
  278.         dc.b    $2e,0            ; numeric pad 5
  279.         dptr    _1.Cnum5
  280.         dc.b    $40,0            ; space
  281.         dptr    _1.Cspace
  282.         dc.w    0
  283.  
  284. _1.CSright    moveq    #31,d2            ; step = 32 pixels
  285. _1.Cright    addq.l    #1,d2            ; step =  1 pixel
  286.         bra.s    _1.startadr
  287. _1.CSleft    moveq    #-31,d2            ; step = -32 pixels
  288. _1.Cleft    subq.l    #1,d2            ; step =  -1 pixel
  289. _1.startadr    move.l    begbuf(a4),d1
  290.         add.l    d2,d1
  291.         cmp.l    data(a4),d1
  292.         bhs.s    _1.starta_ok
  293.         move.l    data(a4),d1    ; set to data if too low
  294. _1.starta_ok    move.l    d1,begbuf(a4)
  295. _1.Cspace    bsr    convert
  296.         bmi    _1.away
  297.         beq    _1.waitloop
  298.         bra    _1.handle
  299. _1.CSup        move.w    #-9920,d2    ; step = -10240 pixels
  300. _1.Cup        sub.w    #320,d2    ; step = -320 pixels
  301.         ext.l    d2
  302.         bra.s    _1.startadr
  303. _1.CSdown    move.w    #9920,d2    ; step = -10240 pixels
  304. _1.Cdown    add.w    #320,d2    ; step = 320 pixels
  305.         bra.s    _1.startadr
  306. _1.Cnum4    moveq    #-64,d2
  307.         bra.s    _1.modulo
  308. _1.Cnum6    moveq    #64,d2
  309. _1.modulo    move.l    modulo(a4),d1
  310.         add.l    d2,d1
  311.         bpl    _1.modulo_ok
  312.         moveq    #0,d1    ; set to 0 if too low
  313. _1.modulo_ok    move.l    d1,modulo(a4)
  314.         bra    _1.Cspace
  315. _1.CSnum4    move.w    #-768,d2
  316.         ext.l    d2
  317.         bra.s    _1.modulo
  318. _1.CSnum6    move.w    #768,d2
  319.         bra.s    _1.modulo
  320. _1.CAnum4    moveq    #-1,d2
  321.         bra.s    _1.modulo
  322. _1.CAnum6    moveq    #1,d2
  323.         bra.s    _1.modulo
  324. _1.Creset    move.l    data(a4),begbuf(a4)
  325. _1.Cnum5    move.l    #(BYTESPERROW*8*256),modulo(a4)
  326.         bra    _1.Cspace
  327. _1.CSnum5    move.l    #(BYTESPERROW*16*256),modulo(a4)
  328.         bra    _1.Cspace
  329.  
  330. _1.Cdigi    bsr    geti
  331.         bmi.s    _1.away
  332.         cmp.b    #($22!$80),d0
  333.         bne.s    _1.Cdigi
  334.         bsr    digitize
  335.         bra    _1.Cspace
  336.  
  337. _1.away    moveq    #0,d7
  338. _1.cleanup    bsr    freeint
  339.  
  340.         move.l    data(a4),d0
  341.         beq.s    ._4
  342.         move.l    d0,a1
  343.         move.l    DATA(a4),d0
  344.         xref    _LVOFreeMem
  345.         move.l    $4,a6
  346.         jsr    _LVOFreeMem(a6)
  347. ._4
  348.  
  349.         move.l    window(a4),d0
  350.         beq.s    ._5
  351.         move.l    d0,a0
  352.         xref    _LVOCloseWindow
  353.         move.l    .IntuitionBase(a4),a6
  354.         jsr    _LVOCloseWindow(a6)
  355. ._5
  356.         move.l    screen(a4),d0
  357.         beq.s    ._6
  358.         move.l    d0,a0
  359.         xref    _LVOCloseScreen
  360.         move.l    .IntuitionBase(a4),a6
  361.         jsr    _LVOCloseScreen(a6)
  362. ._6
  363.         bsr    freeparallel
  364.         xref    _LVOCloseLibrary
  365.         move.l    .IntuitionBase(a4),d0
  366.         beq.s    ._7
  367.         move.l    d0,a1
  368.         move.l    $4,a6
  369.         jsr    _LVOCloseLibrary(a6)
  370.         clr.l    .IntuitionBase(a4)
  371. ._7
  372.         move.l    .GfxBase(a4),d0
  373.         beq.s    ._8
  374.         move.l    d0,a1
  375.         move.l    $4,a6
  376.         jsr    _LVOCloseLibrary(a6)
  377.         clr.l    .GfxBase(a4)
  378. ._8
  379.         move.l    d7,d0
  380.         unlk    a4
  381.         rts
  382.  
  383.  
  384.  
  385. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  386.  
  387. geti
  388.         movem.l    d2-d3/a0-a2,-(sp)
  389.         move.l    window(a4),a0
  390.         move.l    wd_UserPort(a0),a2
  391.         move.b    MP_SIGBIT(a2),d2
  392.         moveq    #0,d0
  393.         bset    d2,d0
  394.         bset    #12,d0
  395.         xref    _LVOWait
  396.         move.l    $4,a6
  397.         jsr    _LVOWait(a6)
  398.         btst    d2,d0
  399.         beq    _2.ctrlc
  400.         move.l    window(a4),a0
  401.         move.l    wd_UserPort(a0),a2
  402.         move.l    a2,a0
  403.         xref    _LVOGetMsg
  404.         jsr    _LVOGetMsg(a6)
  405.         tst.l    d0
  406.         beq.s    _2.nutton
  407.         move.l    d0,a1
  408.         moveq    #0,d2
  409.         moveq    #0,d3
  410.         cmp.l    #RAWKEY,im_Class(a1)
  411.         bne.s    _2.reply
  412.         move.w    im_Code(a1),d2
  413.         move.w    im_Qualifier(a1),d3
  414. _2.reply
  415.         xref    _LVOReplyMsg
  416.         jsr    _LVOReplyMsg(a6)
  417.  
  418. _2.eat        move.l    a2,a0    ; eat extra messages
  419.         jsr    _LVOGetMsg(a6)
  420.         tst.l    d0
  421.         beq.s    ._9
  422.         move.l    d0,a1
  423.         jsr    _LVOReplyMsg(a6)
  424.         bra    _2.eat
  425. ._9
  426.         move.l    d3,d1    ; return Qualifier
  427.         move.l    d2,d0    ; return a rawkey
  428.         bra.s    _2.out
  429. _2.ctrlc    moveq    #-1,d0
  430.         bra.s    _2.out
  431. _2.nutton    moveq    #0,d0
  432. _2.out
  433.         movem.l    (sp)+,d2-d3/a0-a2
  434.         rts
  435.  
  436.  
  437. allocparallel
  438.         move.l    #HUGEMEM,d0
  439.         move.l    d0,d2
  440.         moveq    #MEMF_PUBLIC,d1
  441.         move.l    $4,a6
  442.         jsr    _LVOAllocMem(a6)
  443.         tst.l    d0
  444.         beq.s    _3.notgot
  445.         move.l    d0,a1
  446.         move.l    d2,d0
  447.         jsr    _LVOFreeMem(a6)
  448.  
  449. _3.notgot
  450.         lea    ._A(pc),a1
  451.         moveq.l    #0,d0
  452.         xref    _LVOOpenResource
  453.         jsr    _LVOOpenResource(a6)
  454.         move.l    d0,.MiscResBase(a4)
  455.         beq    _3.error
  456.  
  457.         moveq.l    #MR_PARALLELPORT,d0
  458.         lea    prgname(pc),a1
  459.         move.l    .MiscResBase(a4),a6
  460.         jsr    _LVOAllocMiscResource(a6)
  461.         tst.l    d0
  462.         bne.s    _3.error
  463.         st    parport(a4)
  464.         move.b    d0,datadir
  465.         rts    .ne
  466. _3.error    moveq    #1,d0
  467.         rts
  468.  
  469.  
  470.  
  471. freeparallel
  472.         tst.b    parport(a4)
  473.         beq.s    ._B
  474.         moveq    #MR_PARALLELPORT,d0
  475.         move.l    .MiscResBase(a4),a6
  476.         jsr    _LVOFreeMiscResource(a6)
  477. ._B
  478.         rts
  479.  
  480.  
  481. allocint
  482.         lea    ._C(pc),a1
  483.         move.l    $4,a6
  484.         jsr    _LVOOpenResource(a6)
  485.         move.l    d0,.CIABase(a4)
  486.  
  487.         xref    _LVODisable
  488.         move.l    $4,a6
  489.         jsr    _LVODisable(a6)
  490.         lea    interr,a1
  491.         move.b    #NT_INTERRUPT,LN_TYPE(a1)
  492.         lea    prgname(pc),a0
  493.         move.l    a0,LN_NAME(a1)
  494.         lea    irqcode(pc),a0
  495.         move.l    a0,IS_CODE(a1)    ; addr of irq routine
  496.         moveq    #CIAICRB_TA,d0    ; we want timer A
  497.         xref    _LVOAddICRVector
  498.         move.l    .CIABase(a4),a6
  499.         jsr    _LVOAddICRVector(a6)
  500.         move.l    d0,d2
  501.         bne    _5.error
  502.  
  503.         moveq    #1,d0
  504.         xref    _LVOAbleICR    ; disable interrupt
  505.         jsr    _LVOAbleICR(a6)
  506.  
  507.         moveq    #1,d0
  508.         xref    _LVOSetICR    ; clear interrupt
  509.         jsr    _LVOSetICR(a6)
  510.  
  511.         xref    _LVOEnable
  512.         move.l    $4,a6
  513.         jsr    _LVOEnable(a6)
  514.         st    int(a4)
  515.         moveq    #0,d0
  516.         rts
  517. _5.error
  518.         move.l    $4,a6
  519.         jsr    _LVOEnable(a6)
  520.         moveq    #-1,d0    ; error
  521.         rts
  522.  
  523. freeint
  524.         tst.b    int(a4)
  525.         beq.s    ._D
  526.         moveq    #CIAICRB_TA,d0
  527.         lea    interr,a1
  528.         xref    _LVORemICRVector
  529.         move.l    .CIABase(a4),a6
  530.         jsr    _LVORemICRVector(a6)
  531. ._D
  532. irqcode        rts    ; kludge, int doesn't do anything
  533.  
  534.  
  535.  
  536. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  537.  
  538. digitize
  539.         move.l    $4,a6    ; 709379 kHz
  540.         jsr    _LVODisable(a6)
  541.         move.b    #68,timerl    ; /8samples/320pixels/4Hz
  542.         move.b    #0,timerh
  543.         or.b    #$01,tcontrol    ; start timer A
  544.  
  545.         lea    userport,a0    ; source
  546.         move.l    data(a4),a1    ; destination
  547.         move.l    a1,begbuf(a4)
  548.         move.l    #(BYTESPERROW*8*256),modulo(a4)
  549.         lea    tint,a2
  550.         move.l    DATA(a4),d2    ; # of bytes
  551.  
  552.         move.w    #$80,d1
  553. _7.dloop    moveq    #7,d3    ; sample #
  554.         moveq    #0,d7    ; clear sum
  555.         btst    #0,(a2)
  556.         beq.s    _7.dwait
  557.         move.w    #$f00,$dff180
  558.         bra.s    _7.dbusy
  559.  
  560. _7.dwait    btst    #0,(a2)
  561.         beq.s    _7.dwait
  562.  
  563. _7.dbusy    moveq    #0,d0
  564.         move.b    (a0),d0
  565.         sub.w    d1,d0        ; sub mid level
  566.         bpl.s    _7.dwok        ; positive?
  567.         neg.w    d0        ; no, make it
  568. _7.dwok        add.w    d0,d7        ; sum
  569.         dbf    d3,_7.dwait    ; do for 8 samples
  570.         lsr.w    #2,d7        ; shift sum
  571.         move.b    d7,(a1)+    ; save sample
  572.         subq.l    #1,d2
  573.         bne.s    _7.dloop
  574.  
  575.         jsr    _LVOEnable(a6)
  576.  
  577.  
  578.         rts
  579.  
  580.  
  581. convert
  582.         clr.l    bufpoi(a4)
  583.         move.l    window(a4),a0
  584.         move.l    wd_UserPort(a0),a0
  585.         move.b    MP_SIGBIT(a0),d7    ; sigbit
  586.         move.l    $4,a6
  587.  
  588.         move.l    screen(a4),a2
  589.         lea    sc_RastPort(a2),a2    ; rp
  590.         move.l    rp_BitMap(a2),a2    ; bitmap
  591.         lea.l    bm_Planes(a2),a5    ; planeptrs
  592.         movem.l    (a5),a0-a3        ; get plane pointrs
  593.         move.l    begbuf(a4),a5        ; source dataptr
  594.         move.w    #ROWS-1,d6        ; rows per plane
  595.  
  596. _8.rowloop    swap    d6
  597.         move.w    #(BYTESPERROW/2-1),d6    ; words to write per row
  598. _8.byteloop    moveq    #15,d5            ; bit counter
  599. _8.bitloop    move.b    (a5)+,d4        ; data byte
  600.         roxr.b    #5,d4
  601.         roxl.w    #1,d0        ; plane 0
  602.         roxr.b    #1,d4
  603.         roxl.w    #1,d1        ; plane 1
  604.         roxr.b    #1,d4
  605.         roxl.w    #1,d2        ; plane 2
  606.         roxr.b    #1,d4
  607.         roxl.w    #1,d3        ; plane 3
  608.         dbf    d5,_8.bitloop
  609.  
  610.         move.w    d0,(a0)+
  611.         move.w    d1,(a1)+
  612.         move.w    d2,(a2)+
  613.         move.w    d3,(a3)+
  614.         dbf    d6,_8.byteloop
  615.  
  616.         moveq    #0,d0
  617.         moveq    #0,d1
  618.         movem.l    a0-a1,-(sp)
  619.         xref    _LVOSetSignal    ; user activity?
  620.         jsr    _LVOSetSignal(a6)
  621.         movem.l    (sp)+,a0-a1
  622.         btst    d7,d0
  623.         beq.s    _8.go_on
  624.         bsr    geti
  625.         bmi.s    _8.away
  626.         tst.b    d0
  627.         bpl.s    _8.away        ; got a new rawkey
  628.  
  629. _8.go_on    move.l    begbuf(a4),a5    ; restore buffer start address
  630.         move.l    modulo(a4),d0
  631.         move.l    bufpoi(a4),d1
  632.         add.l    d0,d1
  633.         move.l    d1,bufpoi(a4)
  634.         asr.l    #8,d1
  635.         add.l    d1,a5
  636.  
  637.         swap    d6
  638.         dbf    d6,_8.rowloop
  639.  
  640.         moveq    #0,d0
  641. _8.away
  642.  
  643.         rts
  644.  
  645.  
  646.  
  647. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  648.  
  649. iniword        MACRO    *
  650.         DC.B    $90
  651.         DC.B    \1
  652.         DC.W    \2
  653.         ENDM
  654.  
  655. inilong        MACRO    *
  656.         DC.B    $80
  657.         DC.B    \1
  658.         DC.L    \2
  659.         ENDM
  660.  
  661. nscreen        iniword    ns_Width,BYTESPERROW*8
  662.         iniword    ns_Height,ROWS
  663.         iniword    ns_Depth,4
  664.         iniword    ns_DetailPen,-1
  665.         iniword    ns_ViewModes,V_SPRITES!V_LACE
  666.         iniword    ns_Type,CUSTOMSCREEN!SCREENQUIET
  667.         dc.w    0
  668.  
  669. nwindow        iniword    nw_Width,BYTESPERROW*8
  670.         iniword    nw_Height,ROWS
  671.         iniword    nw_DetailPen,-1
  672.         inilong    nw_IDCMPFlags,RAWKEY
  673.         inilong    nw_Flags,ACTIVATE!BORDERLESS!BACKDROP
  674.         iniword    nw_Type,CUSTOMSCREEN
  675.         dc.w    0
  676.  
  677. colors        dc.w    $0000,$0111,$0222,$0333,$0444,$0555,$0666,$0777
  678.         dc.w    $0888,$0999,$0aaa,$0bbb,$0ccc,$0ddd,$0eee,$0fff
  679.  
  680. prgname        dc.b    'sat',0
  681.  
  682. .GfxName    set    *
  683. ._2        dc.b    'graphics.library',0
  684. .IntuitionName    set    *
  685. ._3        dc.b    'intuition.library',0
  686. ._A        dc.b    'misc.resource'
  687.         dc.b    0
  688. ._C        dc.b    'ciab.resource'
  689.         dc.b    0
  690.         ds.w    0
  691.  
  692.         section    hyi,bss
  693.  
  694. NS    ds.b    ns_SIZEOF
  695. NW    ds.b    nw_SIZE
  696. interr    ds.b    IS_SIZE
  697.  
  698.  
  699.         end
  700.  
  701.  
  702.  
  703.